// 监听器模块
// 接口返回的数据是异步的，所以，当我们进入到指定的 Page和Component 对象内部的时候，有可能还没得到数据，就需要先注册一个监听函数，
// 等到接口请求成功之后，然后再执行设值操作；

function Observer() {
  this.actions = new Map()
}

// 监听事件
Observer.prototype.addNotice = function(key, action) {
  if (this.actions.has(key)) {
    const handlers = this.actions.get(key)
    this.actions.set(key, [...handlers, action])
  } else {
    this.actions.set(key, [action])
  }
}

// 删除监听事件
Observer.prototype.removeNotice = function(key) {
  this.actions.delete(key)
}

// 发送事件
Observer.prototype.postNotice = function(key, params) {
  if (this.actions.has(key)) {
    const handlers = this.actions.get(key)
    handlers.forEach(handler => handler(params))
  }
}


module.exports = new Observer()